import java.util.Deque;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;

//      队列
//      对于LinkedList
//      不仅可当做 普通队列
//      也可以当做 双端队列
//      也可以当做 双向链表
//      还可以当做 栈

//      对于链表本身来说 是没有下标的
//      链表和顺序表的区别是什么?
//      ArrayList和LinkedList区别是什么?
//      1.共性 增删查改
//      2.内存的逻辑
public class TestDemo {
    public static void main1(String[] args) {
//        普通队列：队尾进队头出
        Queue<Integer> queue = new LinkedList<>();
//        双端队列：队尾队头都可以进出（可以当作栈来用它有提供方法）
        Deque<Integer> deque = new LinkedList<>();
//        上面功能顺序 从小-大
        LinkedList<Integer> linkedList = new LinkedList<>();
    }

    public static void main2(String[] args) {
        Queue<Integer> queue = new LinkedList<>();
//        添加
        queue.add(1);
        queue.offer(2);
//        查看
        System.out.println(queue.element());//1
        System.out.println(queue.peek());//1
//        删除
        System.out.println(queue.remove());//1
        System.out.println(queue.poll());//2
    }

    public static void main3(String[] args) {
        Deque<Integer> deque = new LinkedList<>();
        deque.offer(1);
        deque.offerFirst(2);
        deque.offerLast(3);
//        2  1  3
        System.out.println(deque.peek());//2
        System.out.println(deque.peekFirst());//2
        System.out.println(deque.peekLast());//3
    }


//    自己写的队列
    public static void main4(String[] args) {
        MyQueue myQueue = new MyQueue();
        myQueue.offer(1);
        myQueue.offer(2);
        myQueue.offer(3);
        System.out.println(myQueue.peek());//1
        System.out.println(myQueue.poll());//1
        System.out.println(myQueue.poll());//2
        System.out.println(myQueue.poll());//3
//        System.out.println(myQueue.poll());抛异常RuntimeException
        System.out.println(myQueue.isEmpty());//true
    }

//    测MyCircularQueue
    public static void main5(String[] args) {
        MyCircularQueue circularQueue = new MyCircularQueue(3);
        circularQueue.enQueue(1);  // 返回 true
        circularQueue.enQueue(2);  // 返回 true
        circularQueue.enQueue(3);  // 返回 true
        circularQueue.enQueue(4);  // 返回 false，队列已满
        circularQueue.rear();  // 返回 3
        circularQueue.isFull();  // 返回 true
        circularQueue.deQueue();  // 返回 true
        circularQueue.enQueue(4);  // 返回 true
        circularQueue.rear();  // 返回 4
    }

//    测试MyQueueOJ
    public static void main(String[] args) {
        MyQueueOJ myQueue = new MyQueueOJ();
        myQueue.push(1); // queue is: [1]
        myQueue.push(2); // queue is: [1, 2] (leftmost is front of the queue)
        myQueue.peek(); // return 1
        myQueue.pop(); // return 1, queue is [2]
        myQueue.empty(); // return false
    }

}
